import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
/**
 * Fenêtre principale de l'application Bibliothèque avec le menu 
 * @author IUT,  A.Culet 
 * @version 1.0
 */
public class VueMenuBiblio  extends Vue{
	private JFrame frame;
	private JMenuItem mntmRechercheParMot, mntmRechercheParAuteur, mntmConsulterPriodiqe,menuItemConsult, MenuItemExemp,mntmNouvelleParution;

	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************
	public VueMenuBiblio(Controleur controleur) {
		super (controleur);
		this.initialize();
	} // Fin Constructeur
	
	public JFrame getFrame() {
		return frame;	
	}
	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setResizable(false);
		frame.setTitle("Gestion de bibliothèque");
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
		frame.addWindowListener (new WindowAdapter() {
			public void windowClosing (WindowEvent e) {
			getControleur().fermerVue(VueMenuBiblio.this);
			}
		});
		frame.getContentPane().setLayout(null);
		
		JMenuBar menuBar = new JMenuBar();
		menuBar.setBounds(40, 96, 373, 21);
		frame.getContentPane().add(menuBar);
		
		JMenu mnApplication = new JMenu("Application");
		mnApplication.setHorizontalAlignment(SwingConstants.LEFT);
		menuBar.add(mnApplication);
		
		JMenuItem menuItemQuitter = new JMenuItem("Quitter");
		menuItemQuitter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueMenuBiblio.this);
				}		
		});
		mnApplication.add(menuItemQuitter);
		
		JMenu mnOuvrage = new JMenu("Ouvrage");
		menuBar.add(mnOuvrage);
		
		JMenuItem MenuItemOuv = new JMenuItem("Nouvel ouvrage");
		
		MenuItemOuv.addActionListener(new ActionListener()
		 {
			@Override
			public void actionPerformed(ActionEvent event) {
				//  affichage de la fenetre de saisie d'un ouvrage
				getControleur(). saisirOuvrage() ;}
		});
		
		mnOuvrage.add(MenuItemOuv);

		MenuItemExemp = new JMenuItem("Nouvel exemplaire");
		MenuItemExemp.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//  affichage de la fenetre de saisie d'un exemplaire
				getControleur(). saisirExemplaire() ;}
		});
		
		mnOuvrage.add(MenuItemExemp);
		
		menuItemConsult = new JMenuItem("Consulter ouvrage");
		menuItemConsult.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// affichage de la fenetre de consultation d'un ouvrage
				getControleur().consulterOuvrage() ;}
		});		
		mnOuvrage.add(menuItemConsult);
		
		JMenu mnPriodique = new JMenu("Périodique");
		menuBar.add(mnPriodique);
		
		JMenuItem mntmPriodique = new JMenuItem("Nouveau Périodique");
		mntmPriodique.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//  affichage de la fenetre de saisie d'un exemplaire
				getControleur().saisirPeriodique() ;}
		});
		mnPriodique.add(mntmPriodique);
		
		mntmConsulterPriodiqe = new JMenuItem("Consulter Périodique");
		mntmConsulterPriodiqe.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//  affichage de la fenetre de saisie d'un exemplaire
				getControleur().consulterPeriodique() 
				;}
		});
		mnPriodique.add(mntmConsulterPriodiqe);
		
		mntmNouvelleParution = new JMenuItem("Nouvelle parution");
		mntmNouvelleParution.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//  affichage de la fenetre de saisie d'une parution
				 getControleur().saisirParution() 
				;}
		});
		mnPriodique.add(mntmNouvelleParution);
		
		JMenu mnRechercher = new JMenu("Rechercher");
		menuBar.add(mnRechercher);
		
		mntmRechercheParAuteur = new JMenuItem("Recherche par auteur");
		mntmRechercheParAuteur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//  affichage de la fenetre de saisie d'un exemplaire
				getControleur().rechercherParAuteur() 
				;}
		});
		mnRechercher.add(mntmRechercheParAuteur);
		
		mntmRechercheParMot = new JMenuItem("Recherche par mot clé");
		mntmRechercheParMot.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
					getControleur().rechercherParMotsCles()
				;}
		});
		mnRechercher.add(mntmRechercheParMot);
		
		JMenu mnOptions = new JMenu("Options");
		menuBar.add(mnOptions);
		
		JMenuItem mntmChargerListeDautorit = new JMenuItem("Charger liste d'autorit\u00E9");
		mnOptions.add(mntmChargerListeDautorit);
		
				mntmChargerListeDautorit.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
								getControleur().chargerListAutorite();
						;}
				});
		
		JMenuItem mntmChargerDonnesTest = new JMenuItem("Charger donn\u00E9es Test");
		mnOptions.add(mntmChargerDonnesTest);
		
	

		mntmChargerDonnesTest.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
					getControleur().chargerDonnneesTest();
					WindowUpdateButton();					
				;}
		});
		
		
		JMenuItem mntmViderLesDonnees = new JMenuItem("Vider les donn\u00E9es");
		mnOptions.add(mntmViderLesDonnees);
		frame.setVisible(true);
		
		mntmViderLesDonnees.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().viderFichier();
				WindowUpdateButton();
			;}
		});
		
		this.WindowUpdateButton();
	}
	
	/**
	 * méthode exécutée lorsque la croix de fermeture de la fenêtre a été cliquée
	 */
	public void windowClosing (WindowEvent e) {
		getControleur().fermerVue(VueMenuBiblio.this);
	}
	
	public void WindowUpdateButton () {
		if (this.getControleur().getOuvrages().size() == 0){
			menuItemConsult.setEnabled(false);
			MenuItemExemp.setEnabled(false);
		}
		else{
			menuItemConsult.setEnabled(true);
			MenuItemExemp.setEnabled(true);			
		}
		if (this.getControleur().getPeriodiques().size() == 0){
			mntmConsulterPriodiqe.setEnabled(false);
			mntmNouvelleParution.setEnabled(false);
		}
		else{
			mntmConsulterPriodiqe.setEnabled(true);
			mntmNouvelleParution.setEnabled(true);			
		}
		if (this.getControleur().getAuteurs().size() == 0 && (this.getControleur().getOuvrages().size() == 0|| this.getControleur().getPeriodiques().size() == 0)){
			mntmRechercheParAuteur.setEnabled(false);
		}
		else{
			mntmRechercheParAuteur.setEnabled(true);
		}
		if (this.getControleur().getOuvrages().size() == 0 && this.getControleur().getPeriodiques().size() == 0 ){
			mntmRechercheParMot.setEnabled(false);
		}
		else{
			mntmRechercheParMot.setEnabled(true);			
		}
	}
}
